/*
*
==============================================================================
*  Name        : 
*  Part of     : Omen Game Engine
*  Description : 
*  Version     : 1.0
*
*  Copyright (c) 2013 Lauri Kortevaara.
* 
==============================================================================
*/

#pragma once

/// Omen Headers
#include "OmenConfig.h"
#include "IOmenObject.h"
#include "IOmenRenderable.h"

#include "OmenMath.h"

namespace Omen
{
    class OMEN_API IShader : public Omen::IObject, public IRenderable
    {
    public:
        virtual Omen_GUID classId() const = 0;    /// <summary>Defines the class ID</summary>

        /// Shader validator
        virtual bool isValid() = 0;

        /// Vertex Shader
        virtual void setVertexShaderPtr( void* pShader ) = 0;
        virtual void* getVertexShaderPtr() = 0;

        virtual void setVertexShaderSource( wchar_t* pSource, unsigned long size ) = 0;
        virtual void getVertexShaderSource( wchar_t* pSource, unsigned long maxSize ) = 0;

        /// Pixel Shader
        virtual void setPixelShaderPtr( void* pShader ) = 0;
        virtual void* getPixelShaderPtr() = 0;

        virtual void setPixelShaderSource( wchar_t* pSource, unsigned long size ) = 0;
        virtual void getPixelShaderSource( wchar_t* pSource, unsigned long maxSize ) = 0;

        /// Geometry Shader
        virtual void setGeometryShaderPtr( void* pShader ) = 0;
        virtual void* getGeometryShaderPtr() = 0;

        virtual void setGeometryShaderSource( wchar_t* pSource, unsigned long size ) = 0;
        virtual void getGeometryShaderSource( wchar_t* pSource, unsigned long maxSize ) = 0;

    protected:
    private:
    };
}